#ifndef _HAL_SCREEN_H
#define _HAL_SCREEN_H
#include "main.h"
#include "LsdLinkList.h"
#define Version 							0x00    //字节长度1 固件版本号
#define LIG_INT 							0x01		//字节长度1 背光亮度控制寄存器，0x00-0x40
#define BUZ_TIME 							0x02    //字节长度1 触控蜂鸣器响起时间寄存器，单位：10ms
#define PIC_ID 								0x03    //字节长度2 写：设置当前需要显示的图片编号。  读：获取当前显示的图片编号
#define TP_Flag 							0x05    //字节长度1 0xAA＝触摸屏坐标有更新； 其它＝触摸屏坐标未更新。 用户读取数据后须清零本标记，否则触摸屏数据不再更新。
#define TP_Status 						0x06    //字节长度1 0x01=第一次按下 0x03=一直按压中 0x02＝抬起 其它＝无效
#define TP_Position 					0x07    //字节长度4 触摸屏按压坐标位置：X_H:L Y_H:L
#define TPC_Enable 						0x0B    //字节长度1 0x00＝触控不启用 其它＝触控启用。（上电默认值为 0xFF，默认启用）
				
#define RTC_COM_ ADJ 					0x1F    //字节长度1 	写入 0x5A 表示用户将要更新 RTC 数据，更新完成后自动清零。
#define RTC_NOW 							0x20    //字节长度14	读：获取实时时钟 YY:MM:DD:WW:HH:MM:SS 年月日星期时分秒（BCD 码）写：设置时钟时钟 YY:MM:DD:WW:HH:MM:SS（BCD 码）

//命令指令


//#define SCREEN_CMD_WRITE 			0x82  	//写指令
//#define SCREEN_CMD_READ  			0x83		//读指令

//#define SCREEN_CMD_WRITE			0x80   //访问控制寄存器  写 0x80
//#define SCREEN_CMD_READ				0x81   //访问控制寄存器  读 0x81

//#define SCREEN_DATA_WRITE			0x82   //访问数据寄存器  写 0x82
//#define SCREEN_DATA_READ			0x83   //访问数据寄存器  读 0x83

#define SCREEN_CMD_WRITE 			0x82  	//写指令
#define SCREEN_CMD_READ  			0x83		//读指令


#define SCREEN_VECTOR_WRITE  		0x00		//写变量图片
#define SCREEN_BACK_WRITE  			0x01		//写背景图片
#define SCREEN_LIGHT_WRITE  		0x02		//写亮度

#define SCREEN_DATA_VAR_WRITE 	0x03		//写数据变量
#define SCREEN_LIGHT_A8_WRITE		0x04		//亮度a8的全灭亮度
#define SCREEN_LIGHT_ICL				0X05		//切ICL




#define SCREEN_VECTOR_READ			0x10		//读变量图片
#define SCREEN_SYS_RESTART			0x11    //重启设备
#define SCREEN_SYS_ID						0x12    //获取当前页ID
#define SCREEN_CMD_VECTOR_READ	0x13		//读控制变量

//#define GUANXIAN_BLOCK_SIZE			512			//冠显每次升级的块大小
#define GUANXIAN_BLOCK_SIZE			(5*1024)			//冠显每次升级的块大小

typedef struct{
	uint16_t sp;
	uint16_t iclOffset;//偏移
	uint16_t icl;	//图标
	uint16_t axisOffset;//偏移
	uint16_t xAxis;//坐标
	uint16_t yAxis;//坐标
}tsStationPro;

typedef struct{
	tsStationPro const* point;
	uint16_t 	 cnt;
}tsStationMode;


typedef struct{
	uint16_t addr;
	uint16_t value;
	uint16_t sp;
//	tsStationPro *station;
}tsVecType;

typedef struct{
	tsVecType const* point;
	uint16_t 	 cnt;
}tsVecMode;

extern tsVecMode const vectotAddrTable[150];
extern tsStationMode  cnStationTable[150]; 
//extern tsStationMode  enStationTable[150];

extern TypeLinkedList ScreenSendDataList;  //屏幕发送链表  
extern TypeLinkedList ScreenOTADataList;  //屏幕OTA发送链表  
extern void OnSendDataToSreen(uint16_t addr, uint8_t cmd, uint16_t data, uint8_t backFlag); //切背景还是切变量图片
extern uint8_t OnGetScreenReciveDate(uint8_t *tbuff, uint16_t tlen);//获得数据信息
//extern void OnSendFileNameToSreen(uint8_t cmd,uint8_t *tbuff,uint16_t dataLen,uint32_t flieOrBlockLen,char *path);

extern void OnSendSPIROMToSreen(uint16_t addr, uint8_t cmd); //写屏幕的外部flash addr== ID号*256/32 列:ID32*256/32  = 256 
extern void OnSendRAMToSreen(uint16_t addr, uint8_t *tbuff,uint16_t tlen); //地址固定为8000 写屏幕的ram
extern uint16_t OnGetSysID(void);
extern uint8_t OnGetScreenReciveDate(uint8_t *tbuff, uint16_t tlen);

#endif

